﻿// 3429. 全排列.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <algorithm>

using namespace std;
/*
https://www.acwing.com/problem/content/3432/

给定一个由不同的小写字母组成的字符串，输出这个字符串的所有全排列。

我们假设对于小写字母有 a<b<…<y<z，而且给定的字符串中的字母已经按照从小到大的顺序排列。

输入格式
输入只有一行，是一个由不同的小写字母组成的字符串，已知字符串的长度在 1 到 6 之间。

输出格式
输出这个字符串的所有排列方式，每行一个排列。

要求字母序比较小的排列在前面。

字母序如下定义：

已知 S=s1s2…sk,T=t1t2…tk，则 S<T等价于，存在 p(1≤p≤k)
，使得 s1=t1,s2=t2,…,sp−1=tp−1,sp<tp成立。

数据范围
字符串的长度在 1到 6之间

输入样例：
abc
输出样例：
abc
acb
bac
bca
cab
cba
*/

string str;
string ans;


void dfs(int idx) {
	if (idx == str.size()) {
		cout << ans << endl;
		return;
	}

	for (int i = 0; i < str.size(); i++) {
		if (str[i] != '#') {
			char back = str[i];
			ans.push_back(back); str[i] = '#';
			dfs(idx + 1);
			ans.pop_back(); str[i] = back;
		}
	}

	return;
}


void solve() {
	dfs(0);

	return ;
}

int main()
{
	cin >> str;
	solve();

	return 0;
}
 